﻿# LuminaDesk

LuminaDesk - это инструмент для рабочего стола Windows, позволяющий с легкостью регулировать яркость нескольких мониторов.

<img src="Images/Screenshot_main.png" alt="Screenshot" width="487.5"><br>
(DPI: 200%)

Пользователь может изменять яркость мониторов, в том числе внешних, как по отдельности, так и совместно. Для системы с датчиком освещенности настраиваемая яркость может отображаться вместе с настроенной.

![Screenshot](Images/Screenshot_unison.png)<br>
(DPI: 100%)

Кроме того, пользователь может плавно изменять регулируемый диапазон яркости и контрастности для каждого монитора.

![Screenshot](Images/Screenshot_range.png)&nbsp;
![Screenshot](Images/Screenshot_contrast.png)<br>

## Требования

 * Windows 7 или новее
 * .NET Framework __4.8__
 * Внешний монитор должен быть включен в режим DDC/CI.
![OSD](Images/Dell_ddcci.jpg)

## Установка/Удаление

Вы можете собрать msi файл через Wix toolset, после чего установить программу по средствам полученого инсталятора.

Обратите внимание на следующее:

 - Файл настроек (и другие файлы) будут созданы по адресу: `[системный диск]\Users\[имя пользователя]\AppData\Local\LuminaDesk\`.
 - При установке флажка [Запускать при входе] в реестр будет добавлено значение: `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`.

## Примечания

 - Имя монитора, отображаемое в главном окне, можно изменить, чтобы легко различать мониторы. Чтобы изменить название, нажмите и удерживайте его, пока оно не станет доступным для редактирования.
 - Одновременно может отображаться не более 4 мониторов.
 - Если внешний монитор не отображается, прочитайте [Обнаружение внешних мониторов].
 - Приложение идентифицирует каждый монитор по уникальному идентификатору, заданному ОС. Даже на одном и том же компьютере и мониторе этот идентификатор может меняться в зависимости от типа подключения (например, режим USB-C DisplayPort Alt) или выбора разъемов одного и того же типа. Поэтому при повторном подключении монитора к другому разъему он может не восприниматься как тот же самый монитор, и некоторые функции могут работать не так, как ожидалось.

### Параметры командной строки

Вы можете использовать параметры командной строки для получения/установки яркости или контрастности.

| Действия                               | Команда                                              |
|----------------------------------------|------------------------------------------------------|
| Получение яркость монитора.            | /get                                                 |
| Получение яркости указанного монитора. | /get [Идентификатор экземпляра устройства]           |
| Получите яркость всех мониторов.       | /get all                                             |
| Настройка яркости монитора.            | /set [Яркость]                                       |
| Установка яркости указанного монитора. | /set [Идентификатор экземпляра устройства] [Яркость] |
| Установите яркость всех мониторов.     | /set all [Яркость]                                   |

Идентификатор экземпляра устройства - это уникальный идентификатор, который ОС присваивает каждому монитору. Он должен быть заключен в кавычки. 

Вы можете переключиться на контрастность, вставив `contrast` после `/get` или `/set` (например, `/get contrast all`).

Если это приложение вызывается с `/get` или `/set`, оно вернет

```
[Идентификатор экземпляра устройства] [Название монитора] [Яркость] B
```

'B' в конце указывает на яркость. Кроме того, в случае выбранного монитора будет добавлено '*'. 

Если вызвать это приложение с `/get contrast` или `/set contrast`, оно вернет

```
[Идентификатор экземпляра устройства] [Название монитора] [Контраст] C
```

Буква «C» в конце обозначает контрастность. Если контрастность не поддерживается монитором, вместо нее будет показано '-'.

Яркость или контрастность варьируется от 0 до 100%. При использовании опции `/set` можно указать само число (например, 20), увеличить (например, +10) или уменьшить (например, -10).

Опции могут выполняться последовательно (например, `luminadesk /set 20 /set contrast 40`).

## Обнаружение внешних мониторов

Это приложение проверяет, может ли каждый внешний монитор управляться через DDC/CI, и показывает только те, которые управляются. 

Для этого приложение запрашивает у монитора информацию о его возможностях через DDC/CI и проверяет, включает ли она возможности получения/настройки яркости. Если информация о возможностях не получена или эти возможности не включены, такой монитор будет считаться неуправляемым через DDC/CI.

Эта функция была протестирована и в большинстве случаев работает хорошо. Поэтому, если монитор не отображается, это, скорее всего, вызвано аппаратными причинами, которые не могут быть решены с помощью данного приложения. К таким причинам относятся:

1. Модель монитора не поддерживает DDC/CI.

1. Настройка DDC/CI монитора выключена. Может потребоваться изменить настройку в экранном меню.

1. Функция DDC/CI монитора не работает. Некоторые мониторы не возвращают корректную информацию о возможностях.

1. Разъем компьютера не поддерживает DDC/CI.

1. Кабель, конвертер или док-станция, соединяющая ПК и монитор, не совместимы с DDC/CI. Кабели Thunderbolt/USB-C обычно совместимы, а конвертеры - нет. Известно, что Surface Dock и Surface Dock 2 совместимы. 

1. Монитор или ПК имеют проблемы, включая нарушение контакта в разъеме. Это особенно характерно для старых мониторов.


### Исключения

 - Если произойдет что-то непредвиденное, будет сохранен __exception.log__. Он будет полезным источником информации при изучении проблемы.

### Setup

1. [Install Visual Studio](https://docs.microsoft.com/en-us/visualstudio/install/install-visual-studio).
2. В программе установки Visual Studio перейдите на вкладку **Отдельные компоненты** и убедитесь, что следующие компоненты проверены и установлены. Версия должна совпадать с соответствующим полем файла проекта (.csproj) каждого проекта.

| Components                                                  | Fields                 |
|-------------------------------------------------------------|------------------------|
| .NET Framework 4.8 SDK<br>.NET Framework 4.8 targeting pack | TargetFrameworkVersion |
| Windows 10 SDK (10.0.19041.0)                               | TargetPlatformVersion  |

3. Загрузите решение, указав `/Source/LuminaDesk.sln`. Затем перейдите в проводник решений, щелкните правой кнопкой мыши на имени решения и выполните команду `Restore NuGet Packages`.
4. Чтобы открыть проект установщика, установите [WiX Toolset Build Tools](https://wixtoolset.org/releases/) и [WiX Toolset Visual Studio Extension](https://marketplace.visualstudio.com/items?itemName=WixToolset.WiXToolset).

### Глобализация

Альтернативный язык может быть показан путем добавления файла Resources (.resx) в папку `/Source/LuminaDesk.Core/Properties`. Каждый файл Resources хранит пары имя/значение для определенного языка и будет выбран автоматически в зависимости от окружения пользователя.

 - Имя файла должно быть в формате `Resources.[язык-культура].resx`.
 - Имя пары имя/значение должно совпадать с именем в файле по умолчанию `Resources.resx`, чтобы отменить его.

### Ссылка

 - VESA [Monitor Control Command Set (MCCS)](https://www.google.co.jp/search?q=VESA+Monitor+Control+Command+Set+Standard+MCCS) standard

## Лицензия

 - MIT License

## Библиотеки

 - [XamlBehaviors for WPF](https://github.com/microsoft/XamlBehaviorsWpf)

## Разработчик

 - Trace Studio
